package com.liunian.algorithmstudy.greedy;

public class MonotoneIncreasingDigits738 {

	/**
	 当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时，我们称这个整数是单调递增的。
	 给定一个整数 n ，返回 小于或等于 n 的最大数字，且数字呈 单调递增 。

	 示例 1:
	 输入: n = 10
	 输出: 9

	 示例 2:
	 输入: n = 1234
	 输出: 1234

	 示例 3:
	 输入: n = 332
	 输出: 299
	 */
	public int monotoneIncreasingDigits(int n) {
		char[] chars = Integer.toString(n).toCharArray();
		int left = Integer.MAX_VALUE;
		for (int i = chars.length - 1; i > 0; i--) {
			if (chars[i] < chars[i - 1]) {
				chars[i] = '9';
				if (i > 1 && chars[i - 1] == 0) {
					chars[i - 1] = '9';
					chars[i - 2] -= 1;
				} else {
					chars[i - 1] -= 1;
				}
				left = i + 1;
			}
		}
		for (int i = left; i < chars.length; i++) {
			chars[i] = '9';
		}
		String s = chars[0] == '0' && chars.length > 1 ? String.valueOf(chars).substring(1) : String.valueOf(chars);
		return Integer.parseInt(s);
	}

	public static void main(String[] args) {
		MonotoneIncreasingDigits738 digits738 = new MonotoneIncreasingDigits738();
		System.out.println(digits738.monotoneIncreasingDigits(1234));
	}

}
